using Outpatient.ErrorCode;
using OutpatientApi.DTO;
using System.Reflection.Metadata;

namespace OutpatientApi.Methodimplementation.IServices
{
    /// <summary>
    /// 咨询分类服务接口
    /// </summary>
    public interface IConsultationCategoryService
    {
        /// <summary>
        /// 获取所有咨询分类
        /// </summary>
        /// <returns>咨询分类列表</returns>
        Task<ApiResult<List<ConsultationCategoryDto>>> GetAllCategoriesAsync();

        /// <summary>
        /// 根据分类ID获取咨询信息列表
        /// </summary>
        /// <param name="categoryId">分类ID</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageSize">页大小</param>
        /// <returns>咨询信息列表</returns>
        Task<ApiResult<List<ConsultationDto>>> GetConsultationsByCategoryIdAsync(int categoryId, int pageIndex = 1, int pageSize = 10);


        /// <summary>
        /// 根据健康咨询ID获取咨询详情信息列表
        /// </summary>
        /// <returns></returns>
        Task<ApiResult<List<ConsultationDetailDto>>> SearchConsultationDetail(ParameterConsultationDetailDto dto);

        /// <summary>
        /// 查询价目表信息（支持按标题和标签查找）
        /// </summary>
        /// <param name="dto">查询参数</param>
        /// <returns>价目表信息列表</returns>
        Task<ApiResult<List<PriceItemDto>>> SearchPriceItemsAsync(PriceItemQueryDto dto);

        /// <summary>
        /// 查询优惠活动信息（支持与价目表连查）
        /// </summary>
        /// <param name="dto">查询参数</param>
        /// <returns>优惠活动信息列表</returns>
        Task<ApiResult<List<DiscountDto>>> SearchDiscountsAsync(DiscountQueryDto dto);

        /// <summary>
        /// 获取所有就医指南信息
        /// </summary>
        /// <returns>就医指南信息列表</returns>
        Task<ApiResult<List<GuideDto>>> GetAllGuidesAsync();

        /// <summary>
        /// 根据指南ID获取指南详情
        /// </summary>
        /// <param name="guideId">指南ID</param>
        /// <returns>指南详情</returns>
        Task<ApiResult<GuideDto>> GetGuideByIdAsync(int guideId);

        /// <summary>
        /// 新增用户收藏
        /// </summary>
        /// <param name="dto">新增收藏参数</param>
        /// <returns>操作结果</returns>
        Task<ApiResult<bool>> AddUserCollectionAsync(AddUserCollectionDto dto);

        /// <summary>
        /// 检查用户是否已收藏指定项目
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <param name="guideId">指南ID</param>
        /// <param name="itemType">项目类型</param>
        /// <returns>是否已收藏</returns>
        Task<ApiResult<bool>> CheckUserCollectionAsync(int userId, int guideId, string itemType);

        /// <summary>
        /// 取消用户收藏
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <param name="guideId">指南ID</param>
        /// <param name="itemType">项目类型</param>
        /// <returns>操作结果</returns>
        Task<ApiResult<bool>> RemoveUserCollectionAsync(int userId, int guideId, string itemType);

    }
} 